<?php

/**
 *  @author Carlos Enrique Peña Albarrán
 *  @package SaGem.system.application
 *  @version 1.0.0
 */

class CFlujodetrabajo extends Model{


	public function Crear(){

		$strRuta = base_url(). "system/application/libraries/datos/Motor/";
		$ezpdo_ = epManager::instance();
		$parametros = array("A" => "A");
		/*
		 * Variables de Carga de informacion
		 */
		$rol = array();
		$prv = array();
		$prf = array();


		/*
		 * Cargar lista de Roles Activos
		 */
		$this->load->library('PLee_Xml',$parametros,'leer_xml');
		unset($xml);
		$rol = array();
		$i = 0;
		$xml = $this->leer_xml->Generar($strRuta . "roles.xml");
		
		foreach($xml as $ListaRoles){
			
			$rol[$ListaRoles->id] = $ezpdo_->create("WRol");
			$rol[$ListaRoles->id]->id = $ListaRoles->id;
			$rol[$ListaRoles->id]->nombre = $ListaRoles->nombre;
			$rol[$ListaRoles->id]->descripcion = $ListaRoles->descripcion;
			//			echo $ListaRoles->id . "<br>";


		}


		/*
		 * Cargar Privilegios del sistemas
		 */

		$this->load->library('PLee_Xml',$parametros,'leer_xml');
		unset($xml);
		$i = 0;
		$xml = $this->leer_xml->Generar($strRuta . "privilegios.xml");
		foreach($xml as $ListaPrivilegios){
			$prv[$ListaPrivilegios->id] = $ezpdo_->create('WPrivilegio');
			$prv[$ListaPrivilegios->id]->id = $ListaPrivilegios->id;
			$prv[$ListaPrivilegios->id]->nombre = $ListaPrivilegios->nombre;
			$prv[$ListaPrivilegios->id]->accion = $ListaPrivilegios->accion;
			$prv[$ListaPrivilegios->id]->metodo = $ListaPrivilegios->metodo;
			$i++;
		}
		unset($this->leer_xml);

		/*
		 * Cargar Perfil tienen asociado
		 * Roles y privilegios
		 */
		$this->load->library('PLee_Xml',$parametros,'leer_xml');
		unset($xml);
		$i = 0;
		$xml = $this->leer_xml->Generar($strRuta . "perfiles.xml");
		foreach($xml as $ListaPerfil){
			$prf[$ListaPerfil->id] = $ezpdo_->create("WPerfilUsuario");
			$prf[$ListaPerfil->id]->id = $ListaPerfil->id;
			$prf[$ListaPerfil->id]->estadoActivo = 1;
			$prf[$ListaPerfil->id]->nombre = $ListaPerfil->nombre;
			$prf[$ListaPerfil->id]->descripcion = $ListaPerfil->descripcion;

			$listaPrivilegiosXML = explode("|",$ListaPerfil->privilegios);
			foreach ($listaPrivilegiosXML as $prvXML){
				if(trim($prvXML) != trim("Todos(*)") && trim($prvXML) != trim("Ninguno(*)") && trim($prvXML) != ""){
					$prf[$ListaPerfil->id]->listaPrivilegio[] = $prv[$prvXML];
					//echo $prvXML . "<br>";
				}

			} //Fin lista de privilegios

			$listaRolesXML = explode("|",$ListaPerfil->roles);
			foreach ($listaRolesXML as $rolXML){
				if(trim($rolXML) != trim("Todos(*)") && trim($rolXML) != trim("Ninguno(*)") && trim($rolXML) != ""){
					$prf[$ListaPerfil->id]->listaRol[] = $rol[$rolXML];
					//echo $prvXML . "<br>";
				}
			}
		}



		/*
		 * Cargar Usuarios Al Sistema
		 * Perfiles
		 */
		$this->load->library('PLee_Xml',$parametros,'leer_xml');
		unset($xml);
		$i = 0;
		$xml = $this->leer_xml->Generar($strRuta . "usuarios.xml");
		foreach($xml as $ListaUsuarios){
			$usr[$ListaUsuarios->id] = $ezpdo_->create("WUsuario");
			$usr[$ListaUsuarios->id]->nombre = $ListaUsuarios->nombre;
			$usr[$ListaUsuarios->id]->seudonimo = $ListaUsuarios->seudonimo;
			$usr[$ListaUsuarios->id]->correo = $ListaUsuarios->correo;
			$usr[$ListaUsuarios->id]->clave = md5($ListaUsuarios->clave);
			$listaPerfilXML = explode("|",$ListaUsuarios->perfil);

			foreach ($listaPerfilXML as $perfilXML){
				if(trim($perfilXML) != trim("Todos(*)") && trim($perfilXML) != trim("Ninguno(*)") && trim($perfilXML) != ""){
					$usr[$ListaUsuarios->id]->listaPerfil[] = $prf[$perfilXML];
				}
			}
			$i++;
		}

		/*
		 * Departamentos autorizados
		 */
		$this->load->library('PLee_Xml',$parametros,'leer_xml');
		unset($xml);
		$i = 0;
		$xml = $this->leer_xml->Generar($strRuta . "dependecias.xml");
		foreach($xml as $ListaDependecias){
			$dependencia[$ListaDependecias->identificador] = $ezpdo_->create('MDependencia');
			$dependencia[$ListaDependecias->identificador]->nombre = $ListaDependecias->nombre;
			$dependencia[$ListaDependecias->identificador]->descripcion = $ListaDependecias->descripcion;
		}

		/*
		 * Asignacion de Empleados
		 */


		$this->load->library('PLee_Xml',$parametros,'leer_xml');
		unset($xml);
		$i = 0;
		$xml = $this->leer_xml->Generar($strRuta . "empleados.xml");
		foreach($xml as $Clientes){
			$empleado[$Clientes->id] = $ezpdo_->create('MClientes');
			$adscripcion[$i] = $ezpdo_->create('MAdscripcionADependencia',time());
			$adscripcion[$i]->dependencia = $dependencia[$Clientes->dependencia];
			$empleado[$Clientes->id]->adscripcion = $adscripcion[$i];
			$empleado[$Clientes->id]->usuario =  $usr[$Clientes->usuario];
			$empleado[$Clientes->id]->disponibilidad = true;
			$i++;
		}

		/*
		 * Creacion del documento tipo
		 */



		$this->load->library('PLee_Xml',$parametros,'leer_xml');
		unset($xml);
		$i = 0;
		$xml_documento = $this->leer_xml->GenerarAutomata($strRuta . "documentos.xml");
		$documentoTipo = $ezpdo_->create('WDocumentoTipo');
		$documentoTipo->identificador = $xml_documento->id;
		$documentoTipo->nombre = $xml_documento->nombre;
		$documentoTipo->descripcion = $xml_documento->descripcion;
		$documentoTipo->claseDescriptora = "WDNominaMensual";


		/*
		 * Clase que describe el Documento
		 */
		$variante = $ezpdo_->create('WVarianteDocumento','Departamento','Documento creado por Nomina Mensual');
		$variante->dependencia = $dependencia["DP-NOM"];
		$documentoTipo->variantes[] = $variante;

		/*
		 * Parametros en Roles
		 */

		/*
		 * Ni idea como cargar la relacion entre Parametros en Rol
		 */
		$parRol1 = $ezpdo_->create('WParametroRol');
		$parRol1->fecha = time();
		$parRol1->tipoVisibilidad = 1;
		$parRol1->permisologia = 1;
		$parRol1->rol = $rol["rol001"];

		/*
		 * Definicion de uso del automata en Estados y Transiciones
		 * Creacion del automata
		 * Un automata tiene referencia a un documentipo
		 * y un documentotipo tiene referencia a un automata
		 * Relacion Inversa.... (inverse)
		 */

		$automata = $ezpdo_->create('WAutomata');
		$automata->nombre = "Automata de " . $xml_documento->nombre;
		$automata->referenciaADocumento = $documentoTipo;

		$automata->rolCreador = $rol["rol001"];
		$documentoTipo->referenciaAAutomata =$automata;

		$i=0;
		foreach($xml_documento->estados as $Estado){

			/*
			 * Estado Inicial del Documento
			 */
			if($i==0){
				$clasedeasignacion = "clsasignacion";
				$metododeasignacion = "mtdasignacion";
			}else{
				$clasedeasignacion = "clsasignacion" . $i;
				$metododeasignacion = "mtdasignacion" . $i;
			}
			/*
			 * lista de estados para el documento
			 */

			$est[$Estado->identificadorunico] = $ezpdo_->create('WEstado');
			$est[$Estado->identificadorunico]->identificador = $Estado->identificadorunico;
			$est[$Estado->identificadorunico]->nombre = $Estado->nombre;
			$est[$Estado->identificadorunico]->parametrosRoles[] = $parRol1;
			$est_inicial->dependenciasPosibles[] = $dependencia;
			$est[$Estado->identificadorunico ]->nombreClaseAsignacionUsuario = $Estado->$clasedeasignacion;
			$est[$Estado->identificadorunico ]->nombreMetodoAsignacion = $Estado->$metododeasignacion;;

			$automata->estadoLista[] = $est[$Estado->identificadorunico];
			if($i == 0){
				$automata->estadoInicial = $est[$Estado->identificadorunico];
			}
			$i++;

		}


		foreach($xml_documento->transiciones as $Trasicion){
			$i=0;
			foreach(get_object_vars($Trasicion) as $Transicion_id => $Transicion_valor){
				if(is_object($Transicion_valor)){
					//Definicion de los objetos como atributos dentro de la transicion
					$i--;
				}else{
					$transicion[$i] = $Transicion_valor;
				}

				/*
				 *  Lista de transiciones
				 *  Lo que debe hacer el documento
				 */
				$i++;


			}
			/*
			 * Describe Transicion en Orden
			 * identificador,descripcion,entrada,salida,roles
			 */
			$transicion_ = $ezpdo_->create('WTransicion');
			$transicion_->identificador = $transicion[0];
			$transicion_->nombreDespliegue = $transicion[1];
			$transicion_->descripcion = $transicion[1];

			$transicion_->estadoOrigen = $est[$transicion[2]];
			$transicion_->estadoDestino = $est[$transicion[3]];

			$transicion_->rol =  $rol[$transicion[4]];
			$transicion_->claseSalida = $transicion[5];
			$transicion_->metodoSalida = $transicion[6];

		}
		$ezpdo_->flush();

	}

}

?>